else
discard;
- gskSetOutputColor(result * u_alpha);
+ gskSetScaledOutputColor(result, u_alpha);
}
void main() {
vec4 diffuse = GskTexture(u_source, vUv);
- gskSetOutputColor(diffuse * u_alpha);
+ gskSetScaledOutputColor(diffuse, u_alpha);
}
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
alpha *= (1.0 - clamp(gsk_rounded_rect_coverage(gsk_decode_rect(transformed_outline), frag), 0.0, 1.0));
- vec4 color = final_color * alpha;
-
- gskSetOutputColor(color);
+ gskSetScaledOutputColor(final_color, alpha);
}
#if defined(NO_CLIP)
result = color;
#elif defined(RECT_CLIP)
- result = color * gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
+ float coverage = gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
gsk_get_frag_coord());
+ result = color * coverage;
#else
- result = color * gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
+ float coverage = gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
gsk_get_frag_coord());
+ result = color * coverage;
+#endif
+
+#if defined(GSK_GLES) || defined(GSK_LEGACY)
+ gl_FragColor = result;
+#else
+ outputColor = result;
+#endif
+}
+
+void gskSetScaledOutputColor(vec4 color, float alpha) {
+ vec4 result;
+
+#if defined(NO_CLIP)
+ result = color * alpha;
+#elif defined(RECT_CLIP)
+ float coverage = gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
+ gsk_get_frag_coord());
+ result = color * (alpha * coverage);
+#else
+ float coverage = gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
+ gsk_get_frag_coord());
+ result = color * (alpha * coverage);
#endif
#if defined(GSK_GLES) || defined(GSK_LEGACY)
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
vec4 diffuse = GskTexture(u_source, tp);
- gskSetOutputColor(diffuse * u_alpha);
+ gskSetScaledOutputColor(diffuse, u_alpha);
}
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}